﻿<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Ops Cms.NET! 安装向导</title>
    <script type="text/javascript" src="/framework/assets/core.js"></script>
    <script type="text/javascript" src="/framework/assets/js/form.js"></script>
    <style type="text/css">
        *{font-size:14px;}
        .hidden{display:none;}
        dl dt{float:left;margin-right:10px;}
        input{width:200px;}
        body{background:#f8f8f8;}
        #setupPanel{width:600px;margin:50px auto;background:#f0f0f0;padding:10px 10px 40px 10px;border:solid 1px #e5e5e5;}
        a.install_btn{display:block;background:#ff6600;color:#fff;text-decoration:none;float:right;width:100px;line-height:22px;text-align:center;margin:10px 5px 0 0;}
        h2{background:#ff6600;color:#fff;line-height:25px;padding:0 20px;}
        textarea{width:590px;height:300px;border:solid 1px #e0e0e0;}
        #install_status{text-align:center;padding:20px 0;font-size:18px;color:#ff6600;}
    </style>
</head>
<body>

<div id="setupPanel">
    <div class="setup hidden">
        <h2>安装向导</h2>
        <textarea>

		欢迎您使用本软件产品！
		
		
        ==========================  安装条款  ==============================

        本《Ops软件最终用户许可协议》（以下简称《协议》）是您与Ops Inc之间关于下载、安装、使用、复制《Ops》软件（以下简称“软件”—该软件的国家版本局的著作权登记号：2005SR04603）的法律协议。
    本《协议》描述Ops与您之间关于“软件”许可使用及相关方面的权利义务。“用户”或“您”是指通过Ops提供的获取软件授权的途径而获得软件授权许可和软件产品的个人或单位。请您仔细阅读本《协议》中的各项条款，包括免除或者限制Ops责任的免责条款及对用户的权利限制。请您审阅并接受或不接受本《协议》（未成年人应在法定监护人陪同下审阅）。
    除非您接受本《协议》条款，否则您无权下载、安装或使用本“软件”及其相关服务。您的安装使用行为将视为对本《协议》的接受，并同意接受本《协议》各项条款的约束。
    同时拥有本《协议》和与之相配套的软件以及Ops或其代理商、经销商开具的收款凭证是您使用Ops软件产品的标志，未经Ops授权，任何拷贝、销售、转让、出租、修改本“软件”的行为均被认为是侵权行为。

一、知识产权声明
本“软件”是由Ops独立开发。“软件”(著作权登记号：2013SR09021)的一切版权等知识产权，以及与“软件”相关的所有信息内容，包括但不限于：文字表述及其组合、商标、图标图饰、界面设计、版面框架、有关数据、印刷材料、电子文档等均受著作权法和国际著作权条约以及其他知识产权法律法规的保护。除了任何Ops授权许可协议所提供的明确书面许可外，拥有本“软件”并不赋予您任何有关这些专利、商标、版权或其它知识产权的许可。

二、“软件”授权范围

    Ops将授权软件的免费版或商业版提供给授权用户，同时提供授权软件的安装说明、使用说明等文档，授权网站和用户依法享有该软件的使用权。但Ops不保证对免费版永远免费。
    授权用户拥有其系统内全部会员资料、商品资料、订单资料及相关信息的所有权，并独立承担与其的相关法律义务。
    对每份许可协议，用户可以在一台计算机、终端机、工作站或其他数字电子仪器（下简称“计算机”）上安装、使用、显示、运行本“软件”。
    保留权利：未明示授权的其他一切权利仍归Ops所有，用户使用其他权利时须另外取得Ops的书面同意。
    除本《协议》有明确规定外，本《协议》并未对本“软件”以外的Ops的其他服务的服务条款作出规定。对于这些服务，可能有单独的服务条款加以规范，请用户在使用有关服务时另行了解与确认。如用户使用该服务，视为对相关服务条款的接受。


三、用户使用须知

    用户应保证注册登记软件时提供的资料真实无误。
    用户在遵守法律及本协议的前提下可依据本《协议》使用本“软件”。用户无权实施包括但不限于下列行为：
        不得删除本“软件”及其他副本上所有关于版权的信息、内容；
        不得对本“软件”进行反向工程、反向汇编、反向编译等；
        对于本“软件”的图像、文字等相关信息，未经Ops书面同意，用户不得擅自实施包括但不限于下列行为：使用、复制、修改、链接、转载、汇编、发表、出版，建立镜像站点、擅自借助“软件”发展与之有关的衍生产品、作品、服务等。
        用户不得利用本“软件”发表、传播、储存违反国家法律、危害国家安全、祖国统一、社会稳定的内容，或侮辱、诽谤、色情、暴力等任何违反国家法律法规政策的内容。
        用户不得利用本“软件”发表、传播、储存侵害他人知识产权、商业秘密权等合法权利内容。
        使用本“软件”必须遵守国家有关法律和政策，维护国家利益，保护国家安全，对于用户违法或违反本协议的使用而引起的一切责任由用户负全部责任，一概与Ops无关，导致Ops损失的，Ops有权要求用户赔偿，并有权立即停止提供服务并保留相关记录，以配合司法机关追究法律责任的权利。
        利用本授权软件发生的商业行为均由授权用户自行负责，因利用本软件进行商业行为所产生的一切纠纷均与Ops无关；
        为方便用户使用，软件内置了譬如网上支付网关等诸多第三方系统。但您应自行评估使用这些系统的风险。这些系统的具体开通与服务由相应第三方公司提供，由此而产生的任何商业纠纷，均与Ops无关；
        授权用户可免费获得并安装使用最新的Ops软件；依据所购买的服务类型中确定的技术支持期限、技术支持方式和技术支持内容在技术支持期限内通过指定的方式获得指定范围内的技术支持。被授权用户享有反映和提出意见的权力，相关意见将被作为首要考虑，但没有一定被采纳的承诺或保证。
    软件的收费服务是指对购买付费技术支持的用户在相应年限内对许可软件提供必要的支持，支持范围包括软件安装、调试、升级和使用过程中出现的问题，或是因为软件本身的错误引起的问题提供必要的支持。收费技术支持的内容并不包括授权用户因为自身需要而要求调整、增加或者定制功能的内容，授权用户如有这方面的需要，可另行和Ops共同制定一个双方都同意的补充协议。
    授权软件升级前授权用户应自行备份数据，升级过程中造成的授权用户数据丢失的，Ops不负担责任。对于授权软件使用过程出现问题需要重新安装或修复者，对于商业用户，Ops将提供予必要的支持，但此修复或重新安装不能保证软件恢复到损坏前的状态，所造成的数据丢失Ops不负担责任。
    Ops不对因授权软件使用错误、软件错误等问题所引起的授权用户损失而承担任何责任，但Ops将尽量避免此类情况的发生且对付费授权用户在出现此类问题的情况下提供必要的支持服务
    有关Ops软件授权包含的服务范围，服务付费方式等，官方网站提供惟一的解释和官方价目表。Ops拥有在不事先通知的情况下，修改授权协议和价目表的权力，修改后的协议或价目表对自改变之日起的新授权用户生效。
    用户自行下载、安装、使用非经Ops开发并正式发布的其它任何由本“软件”衍生的软件将可能导致不可预知的风险，建议用户不要轻易下载、安装、使用，由此产生的一切法律责任与纠纷一概与Ops无关。
    Ops保留在任何时候为您提供本“软件”的修改、升级版本的权利，以及为修改或升级服务收取费用的权利。


四、法律责任与免责

    Ops特别提醒用户注意，Ops为了保障公司业务发展和调整的自主权，Ops拥有随时自行修改或中断软件授权而不需通知用户的权利，如有必要，修改或中断会以通告形式公布于Ops网站重要页面上。
    用户违反本协议或相关的服务条款的规定，Ops有权视用户的行为性质采取包括但不限于中断使用许可、停止提供服务、限制使用、法律追究等措施。同时，Ops会视司法部门的要求，协助调查。
    使用本“软件”涉及到互联网服务因素，可能会受到各个环节不稳定因素的影响，存在因不可抗力、计算机病毒、黑客攻击、系统不稳定、用户所在位置、用户关机以及其他任何网络、技术、通信线路等原因造成的服务中断或不能满足用户要求的风险，用户须明白并自行承担以上风险。在适用法律允许的最大范围内，Ops在任何情况下不就因使用或不能使用本“软件”产品及所发生的特殊的、意外的、非直接或间接的损失承担赔偿责任，即使用户已事先向Ops告知该损害发生的可能性。
    用户因第三方如电信部门的通讯线路故障、技术问题、网络、电脑故障、系统不稳定性及其他各种不可抗力原因而遭受的经济损失，Ops不承担责任。
    因技术故障等不可抗事件影响到服务的正常运行的，Ops承诺在第一时间内与相关单位配合及时处理进行修复，但用户因此而遭受的经济损失，Ops不承担责任。
    您必须充分了解使用本软件的用途和风险。十分必要时，Ops所承担的责任仅限于软件版本的升级。


五、其他条款

    电子文本形式的授权协议如同双方书面签署的协议一样，具有完全的和等同的法律效力。您一旦开始安装Ops软件，即被视为完全理解并接受本协议的各项条款，在享有上述条款授予的权力的同时，受到相关的约束和限制。协议许可范围以外的行为，将直接违反本授权协议并构成侵权，我们有权随时终止授权，责令停止损害，并保留追究相关责任的权力。
    本协议所规定的任何条款的部分或全部无效者，不影响其它条款的效力。
    本协议的解释、效力及纠纷的解决，适用于中华人民共和国法律。若用户和Ops之间发生任何纠纷或争议，首先应友好协商解决，协商不成的，用户在此完全同意将纠纷或争议提交Ops所在地法院管辖。


Ops保留对本协议的最终解释权。 
        </textarea>
    </div>
    <div id="setupForm">
    
    <div class="setup hidden">
        <h2>1/3：配置站点</h2>
        <dl><dt>授权给:</dt><dd><input type="text" field="t_name" class="ui-validate" required="true" value="免费用户"/></dd></dl>
        <dl><dt>授权码:</dt><dd><input type="text" field="t_key" class="ui-validate" required="true" value="YmIyNDAwMGI3YmEyZGMwZTgxZWI2OGQxYzk3MWU4NWI=" style="font-size:10px;"/></dd></dl>
        <dl><dt>站点名称:</dt><dd><input type="text" field="site_name" class="ui-validate" required="true"/></dd></dl>
        <dl><dt>站点域名:</dt><dd><input type="text" field="site_domain" class="ui-validate" required="true" value="http://"/></dd></dl>
        <dl><dt>站点语言:</dt>
        <dd><select class="ui-validate" field="site_language">
            <option selected="selected" value="1">中文(简体)</option>
            <option value="2">中文(繁体)</option>
            <option value="3">英语(英国,美国)</option>
            </select></dd></dl>
        <dl><dt>管理账号:</dt><dd><input type="text" field="user_name" class="ui-validate" required="true" value="master"/></dd></dl>
        <dl><dt>管理密码:</dt><dd><input type="password" field="user_pwd" class="ui-validate" required="true" value=""/></dd></dl>
    </div>
    <div class="setup hidden">
        <h2>2/3：配置数据库</h2>
        <dl><dt>数据环境:</dt><dd>
            <select field="db_type">
                <option value="sqlite">SQLite(小型站选用)</option>
                <option value="mysql" selected="selected">MySQL(推荐)</option>
                <option value="mssql" disabled="disabled">SQLServer(请手工生成数据库)</option>
                <option value="oledb">Access(虚拟主机适用)</option>
            </select></dd></dl>
        
        <div id="db_credential">
            <dl><dt>服务器:</dt><dd><input type="text" field="db_server"/></dd></dl>
            <dl><dt>数据库:</dt><dd><input type="text" field="db_name" /></dd></dl>
            <dl><dt>表前缀:</dt><dd><input type="text" field="db_prefix" value="cms_"/></dd></dl>
            <dl><dt>用户名:</dt><dd><input type="text" field="db_usr" /></dd></dl>
            <dl><dt>密码:</dt><dd><input type="password" field="db_pwd" /></dd></dl>
        </div>

        <div id="db_file" class="hidden">
            <dl><dt>文件名:</dt><dd><input type="text" field="db_file" />*默认随机名称,建议不填写不填写</dd></dl>
            <dl class="hidden"><dt>表前缀:</dt><dd><input type="text" field="db_prefix1" value="cms_"/></dd></dl>
        </div>
    </div>
    <div class="setup hidden">
        <h2>3/3：配置数据库</h2>
        <div id="install_status">安装进行中....</div>
    </div>
    <div class="setup hidden">
        <h2>安装完成!</h2>
    </div>
    
    </div>
    
    <a href="javascript:;" class="install_btn" id="install_btn">>>下一步</a>
    <a href="javascript:" onclick="INSTALL.setup.set(INSTALL.setup.current-1);this.className='hidden';btn.className='install_btn';" class="hidden" id="install_prev_btn">>>上一步</a>
</div>

<script>
    var INSTALL = {
        setups: null,
        setup: {
            total: 0,
            current: 0,
            set: function (i) {
                if (i < INSTALL.setups.length) {
                    for (var j = 0; j < INSTALL.setups.length; j++) {
                        INSTALL.setups[j].className = j == i ? 'setup' : 'setup hidden';
                    }
                    this.current = i;
                }
            }
        }
    };

    var pl = document.getElementById('setupPanel');
    var btn = document.getElementById('install_btn');
    var prev_btn=document.getElementById('install_prev_btn');
    var divs = pl.getElementsByTagName('DIV');
    INSTALL.setups = new Array();
    for (var i = 0; i < divs.length; i++) {
        if (divs[i].className.indexOf('setup') != -1) {
            INSTALL.setups.push(divs[i]);
        }
    }

    INSTALL.setup.total = INSTALL.setups.length;

    btn.onclick = function () {
        btn.className = 'install_btn';
        var index = INSTALL.setup.current + 1;

        if (index < INSTALL.setup.total) {
            INSTALL.setup.set(index);
        }
        if (index + 2 >= INSTALL.setup.total) {
            btn.className = 'hidden';
        }

        //处理安装
        if (index == 3) {
            var install_status_txt = document.getElementById('install_status');
            prev_btn.className = 'hidden';
            install_status_txt.innerHTML = '请稍等，安装中...';

            $JS.xhr.post('/install/process', $JS.json.toQueryString(pl), function (status) {

                if (status == 'SUCCESS' || status == '') {
                    install_status_txt.innerHTML = '<center>恭喜，安装完成!<br />为了您的安全，建议手工删除/install/目录!</center>';
                    $JS.xhr.get('/');
                    setTimeout(function () { location.href = '/';}, 15000);
                } else {
                    INSTALL.setup.current = INSTALL.setup.current - 1;


                    switch (status) {
                        case 'NO_USER': install_status_txt.innerHTML = '管理用户或密码不能为空!'; break;
                        case 'DB_ERROR': install_status_txt.innerHTML = '数据库配置不正确!'; break;
                        case 'DB_INIT_ERROR': install_status_txt.innerHTML = '数据表已经存在或连接失败!'; break;
                        case 'Installed': install_status_txt.innerHTML = '系统已经安装过了!'; break;
                    }
                    prev_btn.className = 'install_btn';
                    btn.className = 'hidden';
                }

            }, function (x) { alert(x); });
        }
    };
    INSTALL.setup.set(0);

    //其他事件
    var dbtype = document.getElementsByTagName('SELECT')[1];
    dbtype.onchange = function () {
        var idx = this.selectedIndex;
        var divs = this.parentNode.parentNode.parentNode.getElementsByTagName('DIV');
        if (idx == 1 || idx == 2) {
            divs[0].className = '';
            divs[1].className = 'hidden';
        } else {
            divs[1].className = '';
            divs[0].className = 'hidden';
        }
    };
</script>

</body>
</html>
